package chenqianghao.rbac.view;

import chenqianghao.rbac.domain.dto.RoleDto;
import chenqianghao.rbac.domain.dto.RoleDto;
import chenqianghao.rbac.domain.vo.RoleVo;
import chenqianghao.rbac.domain.vo.RoleVo;
import chenqianghao.rbac.domain.vo.Result;
import chenqianghao.rbac.service.RoleService;
import chenqianghao.rbac.service.RoleService;

public class RoleView {
    public static RoleVo[] cache;
    public static void show(){
        String menuChoice;
        do {
            printMenu();
            menuChoice = MainView.input.nextLine();
            switch (menuChoice) {
                case "0" -> System.out.println("已返回上一级菜单!");
                case "1" -> list();
                case "2" -> create();
                case "3" -> update();
                case "4" -> delete();
                default -> System.out.println("输入非法，请输入正确的菜单编号！");
            }
        }while (!"0".equals(menuChoice));
    }

    public static void printMenu(){
        String menu = """
                -------------------
                      角色管理
                -------------------
                |   0...返回上级    |
                |   1...角色列表    |
                |   2...创建角色    |
                |   3...更新角色    |
                |   4...删除角色    |
                -------------------
                请输入选项：""";
        System.out.print(menu);
    }
    public static void printError(String message){
        System.out.println("\033[31m"+message+"\033[0m");
    }

    public static void list() {
        Result result = RoleService.list();
        cache = (RoleVo[]) result.data;
        System.out.println("ID\t角色名称\t角色数据访问范围");
        for (RoleVo role : cache){
            if (role != null) {
                System.out.printf("%d\t%s\t%s\n",role.id,role.name,role.dataScope);
            }
        }
    }

    public static void create() {
        System.out.print("请输入角色名称：");
        String name = MainView.input.nextLine();
        System.out.print("请输入角色数据访问范围，输入的值应该为[个人、部门、全局]其中之一：");
        String dataScope = null;
        do{
            String str=MainView.input.nextLine();
            if("个人".equals(str)||"部门".equals(str)||"全局".equals(str))
            {
                dataScope=str;
            }else{
                System.out.print("输入的值不合法，输入的值应该为[个人、部门、全局]其中之一，请重新输入：");
            }
        }while(dataScope==null);
        RoleDto dto = new RoleDto(name,dataScope);
        Result result = RoleService.create(dto);
        if (!result.success) {
            printError(result.message);
            return;
        }
        System.out.println(result.message);

        list();
    }
    public static void update(){
        RoleVo role=getCacheById();
        if(role==null){
            return;
        }

        System.out.println("请输入角色名称,直接按回车表示不修改");
        String name=MainView.input.nextLine();
        name="".equals(name)?role.name:name;
        System.out.println("请输入角色数据访问范围，输入的值应该为[个人、部门、全局]其中之一，直接按回车表示不修改");
        String dataScope = null;
        do{
            String str=MainView.input.nextLine();
            if("个人".equals(str)||"部门".equals(str)||"全局".equals(str))
            {
                dataScope=str;
            }else if("".equals(str)){
                dataScope=role.dataScope;

            }else{
                System.out.print("输入的值不合法，输入的值应该为[个人、部门、全局]其中之一，请重新输入：");
            }
        }while(dataScope==null);
        RoleDto dto=new RoleDto(name,dataScope);
        Result result=RoleService.update(dto,role.id);

        if(!result.success){
            printError(result.message);
            return;
        }
        System.out.println(result.message);
        list();

    }
    public static void delete(){
        RoleVo role=getCacheById();
        if(role==null){
            return;
        }

        System.out.print("请输入‘Y’确认删除，输入其它则取消删除：");
        String confirm=MainView.input.nextLine();

        if(!"Y".equalsIgnoreCase(confirm)){
            System.out.println("您已取消删除");
            return;

        }
        Result result=RoleService.delete(role.id);

        if(!result.success)
        {
            printError(result.message);
            return;
        }
        System.out.println(result.message);
        list();

    }
    public static RoleVo getCacheById(){
        System.out.print("请输入ID,ID必须是大于0的整数：");
        if(!MainView.input.hasNextInt()){
            MainView.input.nextLine();
            printError("ID必须是整数，请输入整数值");
            return null;

        }
        int id=MainView.input.nextInt();
        MainView.input.nextLine();

        if(id<1){
            printError("ID必须大于0，请重新输入");
            return null;
        }
        if(cache==null){
            Result result=RoleService.list();
            cache=(RoleVo[])result.data;
        }
        RoleVo role=null;
        for(RoleVo item:cache){
            if(item.id==id){
                System.out.println("该ID对应的数据是：");
                System.out.printf("ID:%d,名称：%s,数据访问范围：%s\n",item.id,item.name,item.dataScope);
                role=item;
                break;
            }
        }
        if(role==null){
            printError("当前没有该ID对应的数据");
            return null;
        }
        return role;

    }
}